Линктобер #9: Тяжёлый
Если вы помните, некоторое время я писал о том, что решил запилить свою веб-версию игры "Алиас" при помощи нейросетей. После предыдущего поста, я доработал игру: добавил функционал присоединения по ссылке, возможность изменять ник в игровой комнате и зрителей как тип участников, сделал возможность менять настройки игры, после окончания сессии её можно перезапустить, ну и, конечно же, пополнил словарь слов (сейчас в нём более 1000 слов). В настоящий момент я не добавил динамические команды (больше двух), так как для этого придётся серьёзно переписывать всю логику игры и не настроил правильную передачу лидерства внутри команды. Однако, эксперимент, могу точно сказать, удался: я успешно создал вполне работающую игру с расширенным функционалом практически полностью полагаясь на нейросети. Да, конечно же, я принимал решения по логике игры и её архитектуре, давал комментарии относительно принимаемых ИИ решений (если видел, что он делает не то, что мне надо) и где-то даже вручную подправлял небольшие детали кода, но в целом это "нейроигра" и "нейрокод".
Сегодня, помимо хвастовства, я бы хотел поделиться с вами своим небольшим опытом. Я считаю, что программирование с помощью ИИ - это уже вполне обыденная реальность. Он гораздо лучше разбирает код, чем человек (по крайней мере, человек с такими навыками, как у меня), знает множество методов решения проблемы от примитивного говнокода (если сам об этом попросишь) до довольно технологичных решений. Как я писал в прошлый раз, знание кода всё же сильно приветствуется - просто для того, чтобы понимать что тебе предлагает нейросеть, особенно если ты вносишь какие-то правки с её помощью, но виртуозно владеть кодингом уже не нужно.
Теперь относительно доступных решений. Я уже ссылался на такой инструмент, как openrouter.ai - интерфейс, позволяющий работать сразу с несколькими ИИ, однако в последнее время я не очень им доволен. Появились ошибки, связанные с историей общения (периодически ИИ перестаёт понимать ход действий и начинает как бы с нуля), некоторые нейросети оказываются недоступными, хотя работают в их родном интерфейсе и т.п. В общем, пришлось временно от него отказаться и перейти к Qwen. Он показался мне более надёжным, чем DeepSeek - меньше ошибается, стабильнее работает. В его интерфейсе есть один неприятный недостаток: для вопроса нельзя загружать файлы, отличные от txt. То есть, все файлы js, php, sql приходится предварительно переименовывать. Openrouter мне в своё время понравился ещё и тем, что в нём такой проблемы нет. Бесплатная версия Qwen обрабатывает довольно большой (для моих задач) объём информации, хотя и в рамках кодинга отвечает с ощутимой задержкой. Также мне нравится Grok, но он без VPN недоступен, а сам VPN я могу подключить далеко не всегда.
Как именно общаться с нейросетью? На самом деле, вопрос без точного ответа. ИИ хорошо понимает семантику запроса, умеет оперировать синонимами и образами. Например, у меня есть иконка короны для отображения статуса лидера - это текстовый символ, но если я называю его "короной", Qwen понимает о чём речь. Если вместо "лидер" (от leader в коде) я напишу "ведущий", она также распознает какую роль я имею в виду. В то же время, нужно очень аккуратно строить запрос: если пытаться разжёвывать сети задачу как человеку, ты скорее запутаешь её, но в то же время примеры логики могут оказаться полезными.
Важный момент: при появлении ошибок, ты можешь описать ему эти ошибки простым языком - что не так в твоём понимании. Да, это не отменяет необходимости скидывать логи, ошибки из консоли, иногда сильно помогает указание на статусы в базе данных - всё это нужно ИИ также, как и человеку-программисту для лучшего понимания ситуации. Также возможна ситуация, когда нейросеть заходит в тупик и не может решить задачу, гоняя один код по кругу - особенно этим раньше страдала DeepSeek. В таком случае приходится самому принимать решение: просить добавить дополнительную отладку, внимательно следить за исполнением логики кода и т.п. И ещё одно наблюдение: утром, часов до 12 по МСК нейросети загружены заметно меньше, потом, видимо, просыпаются китайцы и время ответа сильно увеличивается.
И тут вы, наверное, спросите: неужто всё так идеально? На самом деле, нет. Помните, я написал, что так и не победил проблему с передачей лидерства? Над ней мы с ИИ трудимся уже несколько дней и я так и не могу добиться получения корректного работающего кода. Отчасти это связано с особенностями архитектуры кода - как раз в силу того, что я хотел получить более-менее понятные самому себе скрипты. Отчасти с тем, что это решение требует достаточно комплексной правки, которую за раз нейросеть осилить не может, а при нескольких итерациях она начинает путаться и вся игра в итоге ломается.
Если бы я занимался таким своеобразным кодингом более плотно, то, конечно же, взял бы платную версию - для неё меньше время ожидания в очереди, больше объём запроса и ответа, в некоторых случаях более актуальные базы. Вероятно, и баг с лидерами я бы тогда уже решил. Однако простые задачи можно решать и так. Это довольно интересное занятие, к тому же какой-никакой опыт я всё же получаю даже при таком подходе, ведь у сети всегда можно попросить объяснить конкретное решение.
P.S. Кстати, смену лидеров починил в итоге, так что игра вполне рабочая на данный момент.
Привет, друзья. Сегодня у меня для вас небольшой юридический обзор одного явления. На практике полученные знания вряд ли вам пригодятся, но чисто теоретически это довольно занятная вещь. Думаю, с такой вещью, как виртуальная доска объявлений, знакомы многие. Знаете вы, скорее всего, и один наиболее популярный на территории России сайт, где такие объявления размещаются. В целях конспирологии, назовём его “Наевито”. Система с точки зрения обычного обывателя проста: кто-то решил продать диван и для этого он завёл на Наевито объявление, где что-то про него написал и указал стоимость. Мы это объявление увидели и возжелали диван себе. Для этого нужно написать продавцу, договориться с ним о, допустим, самовывозе. Встречаемся в условленном месте в условленное время и далее уже по накатанной.
Ок. А как это выглядит с точки зрения закона? Чисто в базе это, конечно же, договор купли-продажи, но при этом отношения сторон возникают на основании размещения продавцом предложения. И раз ли у нас появилось слово "предложение", у более-менее подкованных лиц в голове, наверняка, всплывёт такое понятие, как "оферта". Думаю, о ней слышали даже далекие от юриспруденции люди, но не каждый пытался вникнуть в то, что из себя этот термин представляет. А поэтому, давайте сначала немного скучной теории: вообще, существует несколько видов и подвидов оферт, но в нашем случае остановимся на двух понятиях. Оферта как таковая - это намерение лица заключить договор, выраженное в конкретном предложении, в то время как публичная оферта - это такое предложение, которое делается публично неограниченному кругу лиц. Давайте ещё проще: если я подхожу к Васе и говорю ему “предлагаю обсудить покупку слона”, то это обычная оферта, ведущая к классическому договору купли-продажи, а если кричу на всю улицу “кто хочет купить у меня слона?”, то уже публичная.
Впрочем, сразу скажу, что тут я сильно упрощаю, ибо оферта - это не просто желание совершить сделку, а именно конкретизированное предложение, содержащее все существенные условия будущего договора. Оферта по своей сути - это почти готовый договор, мысленно распечатанный продавцом. Он его протягивает покупателю, а тот должен решить ставит ли он свою подпись или нет. Если подходить к вопросу формально, то любая оферта влечёт определенные обязательства в отношении разместившему её лицу, в частности необоснованный отказ направителя оферты от дальнейших переговоров может быть расценен как недобросовестные действия, а за это даже ответственность предусмотрена (пускай и крайне мифическая). В рамках публичной оферты, соответственно, направитель обязан взаимодействовать со всеми отозвавшимися лицами и не вправе им отказать в сделке без должного обоснования. В то же время, со стороны самого покупателя также имеются обязательства. Его ответ на предложение, который в законе именуется акцептом, должен быть полным и безоговорочным.
Почему я так сильно акцентирую внимание на всех этих формальных обязательствах? Дело в том, что оферта - это особое условие, влекущее сделку, а не просто мимолётно возникшее желание. Если опять же обратиться к теории, договор купли-продажи считается заключенным с момента достижения сторонами соглашения по всем существенным условиям договора. Вы приходите на рынок и видите красивые диваны помидоры.Вы буквально съедаете их в своей голове, но вот беда: продавец сообщает о том, что стоят они 300 рублей за килограмм, а ваш бюджет сильно ограничен. Но ведь это рынок, а на рынке все торгуются, так что путем хитрых переговоров вы достигаете соглашения о том, что, так и быть, такому чудесному человеку помидоры продадут за 250, да ещё персик в подарок дадут. Вероятно, вас всё равно нагрели, подсунули парочку стухших помидорок, и вообще не такие они уж и вкусные, но формально сделка состоялась в рамках оговорённых сторонами условий и это будет вполне легитимная купля-продажа в её самом классическом проявлении. А вот ценник в магазине, на котором указана цена за товар - это вполне себе публичная оферта, ибо вы, как покупатель, благодаря ценнику, заранее, ещё до подхода на кассу, знаете все существенные условия сделки и воспринимаете ситуацию как предложение о продаже. Условия есть, они неизменны, а продавец не вправе отказаться вам товар этот продавать (за исключением отдельно оговоренных законов случаев вроде алкоголя и сигарет).
И вот, собственно, тут мы подходим к главному. Так является ли всё-таки объявление на Наевито публичной офертой? Можем ли мы отказать любому обратившемуся, формально не нарушая закон, и может ли обратившийся назначать свои встречные условия? Отвечаю: да, мы можем, и покупатели могут, так как объявления офертой не являются. Пара-па-пам-пам, фьють, как говорится.
Дело в том, что согласно закону, реклама и иные предложения, адресованные неопределенному кругу лиц, рассматриваются как приглашение "делать оферты", но не самой офертой. Такой оборот, если честно, звучит довольно странно даже для юриста, но суть, думаю, уловить можно. Здесь установлена такая же разница, как и в известной фразе “обещать - не значит жениться”. То есть, вроде бы и там, и там предложение, но в одном случае мы обещаем сделку, а в другом лишь сообщаем о том, что могли бы её заключить, если ты, дорогой покупатель, сам обратишься к нам со своим предложением. По сути, стороны меняются сторонами: разместивший объявление - сообщает о наличии товара, а просмотревший его - о готовности товар купить. Если кому интересно, за нарушение условий, изложенных в рекламе, всё равно предусмотрена ответственность, но это уже совсем другая история.
Подытоживаю абзац выше: если из предложения заключить договор, адресованному неопределенному кругу лиц, не вытекает, что отправитель намерен заключить договор с любым, кто получит такое предложение, то и офертой такое предложение не является. Это не моя личная позиция, если что, а постановление целого Пленума Верховного Суда РФ от 25.12.2018 N 49 и здесь разночтений быть не может. А вот ниже уже будет моё личное мнение и с ним мы, если захотите, можете поспорить.
В объявлении действительно указываются описание товара и его цена, но при этом продавец не назначает точные условия получения товара (он может лишь указать предпочтительные для себя способы), сроки покупки и способы оплаты. Объявление - это хотелки, а не предложение. “Хочу продать диван, вот что он из себя представляет. Продать хотелось бы за 100 рублей”. Заинтересован? Подходишь и договариваешься. В данном случае ситуацию мы можем рассматривать и как те же помидорки на рынке, когда итоговые условия формируются в ходе общения с продавцом, и как рекламное предложение, в котором вы рассказываете о своём чудесном диване.
Впрочем, надо сказать, что отдельное исключение для лиц с мазохистскими наклонностями всё же имеется. Дело в том, что если продавец в своём объявлении прямо укажет, что его сообщение - это именно оферта, и прямо изложит все существенные условия, то тогда уже оговорка о рекламе работать не будет. Зачем ему это надо, я не знаю, но мы, в конце концов, живём в свободной стране и это звучит гордо!
Чет меня заел незаконченный в прошлый раз рисунок и я решил его доделать )